package partFour;

import org.junit.Test;

import java.lang.reflect.Method;
import java.util.Arrays;

/**本类用来测试通过反射获取成员方法*/
public class TestReflect3 {
    //通过单元测试来测试获取成员方法
    @Test
    public void getFunction() throws Exception {
        //1.获取Class字节码对象
        Class<?> clazz = Class.forName("partFour.Student");

        System.out.println("-----------获取目标类的所有成员方法-------------");
        //2.获取所有成员方法
        Method[] ms = clazz.getMethods();
        //2.1遍历数组,获取每个方法的信息
        for (Method m : ms) {
            System.out.println(m.getName());//获取方法名
            Class<?>[] pt = m.getParameterTypes();//获取方法参数类型
            System.out.println(Arrays.toString(pt));
        }

        System.out.println("-----------获取目标类的指定的成员方法-------------");
        //3.获取指定的成员方法（私有方法除外，私有方法需要通过暴力反射获取）
        Method eat = clazz.getMethod("eat", int.class);
        System.out.println(eat.getName());
        Class<?>[] parameterTypes = eat.getParameterTypes();
        System.out.println(Arrays.toString(parameterTypes));
    }
}